global {
    constraint at(origin, 0, 0)
    constraint at(horiz, 200, 0)
    constraint at(vert, 0, 200)
    constraint at(topright, 200, 200)
    constraint at(domain, 0, 0)
    constraint at(codomain, 0, 0)
    objective horizontal(domain)
    objective upright(codomain)
}

Set `domain` {
  shape = Arrow {
    -- TODO: not in scope?
    start = origin
    end   = horiz
    label = Auto
  }
}

Set `codomain` {
  shape = Arrow {
    start = origin
    end   = vert
    label = Auto
  }
}

Set S {
  objective centerLabel(S, S.label)
}

Point p {
    shape  = Dot {
        label = Auto
    }
    objective centerLabel(p, p.label)
} 

Map f x y {
    shape = Curve {
        style = "dashed"
        path = computeSurjectionBbox(10, domain, codomain)
    }
}
